import React, { Suspense } from 'react'
import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom'
import Page, { menuList } from './page'
import Cookie from 'js-cookie'



// props:由外界 传来的参数
const Router = () => {
    // 路由拦截器
    const BeforeEach = (props) => {
        // 获取路由信息
        const location = useLocation()

        const token = Cookie.get('token')

        // 判断token 是否存在
        if (!token && location.pathname !== '/login') {
            // 如果token 不存在 并且即将要跳转的页面也不是登录页面  就重定向到登录
            return <Navigate to="/login" />
        } else {

            let auth = Cookie.get('auth');

            // 获取即将要跳转的路由  主要是要拿到路由菜单的权限  auth
            const routerObj = menuList.find(item => item.path === location.pathname)

            // 如果当前路由需要权限验证 并且权限字符串也存在  就让其验证权限
            if (routerObj && auth) {
                auth = auth.split(',');
                
                // 权限拦截
                if (auth.indexOf(routerObj.auth) !== -1) {
                    // 如果有权限 让正常访问
                    
                } else {
                    // 如果没有权限 让其跳转到401 无权限页面
                    return <Navigate to="/401" />
                }
            } else {
                // 说明不在菜单组件的范畴之内 直接访问
                return props.children
            }



        }
        // 正常访问
        return props.children
    }

    const renderRouter = (routes) => {
        return routes.map((item, idx) => {
            return item.path ? <Route key={idx} path={item.path} element={<BeforeEach>{item.element}</BeforeEach>}>
                {/* 二级路由 */}
                {
                    item.children && renderRouter(item.children)
                }
            </Route> : <Route key={idx} path={item.from} element={<Navigate to={item.to} />} />
        })
    }

    return <Suspense fallback={<div>正在加载。。。</div>}>
        <BrowserRouter>
            <Routes>
                {
                    renderRouter(Page)
                }
            </Routes>
        </BrowserRouter>
    </Suspense>

}


export default Router